package com.wz.project.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.List;

public class JsonUtil {
	/**
	 * public static final Object parse(String text); //
	 * 把JSON文本parse为JSONObject或者JSONArray public static final JSONObject
	 * parseObject(String text)； // 把JSON文本parse成JSONObject public static final
	 * <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
	 * public static final JSONArray parseArray(String text); //
	 * 把JSON文本parse成JSONArray public static final <T> List<T> parseArray(String
	 * text, Class<T> clazz); //把JSON文本parse成JavaBean集合 public static final
	 * String toJSONString(Object object); // 将JavaBean序列化为JSON文本 public static
	 * final String toJSONString(Object object, boolean prettyFormat); //
	 * 将JavaBean序列化为带格式的JSON文本 public static final Object toJSON(Object
	 * javaObject);// 将JavaBean转换为JSONObject或者JSONArray。
	 */

	/**
	 * SerializeWriter：相当于StringBuffer JSONArray：相当于List<Object>
	 * JSONObject：相当于Map<String, Object> JSON反序列化没有真正数组，本质类型都是List<Object>
	 */

	/**
	 * POJO转json
	 * 
	 * @param tResponse
	 * @return
	 */
	public static <T> String getJson(T tResponse) {
		String pojo = JSONObject.toJSONString(tResponse);
		return pojo;
	}

	/**
	 * json转POJO
	 * 
	 * @param pojo
	 * @param tclass
	 * @return
	 */
	public static <T> T getObject(String pojo, Class<T> tclass) {
		return JSONObject.parseObject(pojo, tclass);

	}

	/**
	 * List转json
	 * 
	 * @param ts
	 *            list
	 * @return
	 */
	public static <T> String listToJson(List<T> ts) {
		String jsons = JSON.toJSONString(ts);
		return jsons;
	}

	/**
	 * 从List<A> copy到List<B>
	 *
	 * @param list
	 * @param clazz
	 * @param <T>
	 * @return
	 */
	public static <T> List<T> copy(List<?> list, Class<T> clazz) {
		String oldOb = JSON.toJSONString(list);
		return JSON.parseArray(oldOb, clazz);
	}

	/**
	 * 从对象A copy到 对象B
	 *
	 * @param ob
	 *            A
	 * @param clazz
	 *            B.class
	 * @return B
	 */
	public static <T> T copy(Object ob, Class<T> clazz) {
		String oldOb = JSON.toJSONString(ob);
		return JSON.parseObject(oldOb, clazz);
	}

	/**
	 * json转List
	 * 
	 * @param jsonString
	 *            json字符串
	 * @param clazz
	 * @return
	 */
	public static <T> List<T> jsonToList(String jsonString, Class<T> clazz) {
		List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz);
		return ts;
	}
	/**
	 * json转List
	 *
	 * @param jsonString
	 *            json字符串
	 * @param clazz
	 * @return
	 */
	public static <T> List<T> jsonToList2(String jsonString, Class<T> clazz) {
		if(jsonString.substring(jsonString.length()-1,jsonString.length()).equals(",")){
			jsonString = jsonString.substring(0,jsonString.length()-1);
		}
		List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz);
		return ts;
	}

	/**
	 * 
	 * @param json
	 *            json字符串
	 * @param jsonName
	 *            取出json里的值名字
	 * @return
	 */
	public static <T> List<T> jsonToList(String json, String jsonName, Class<T> clazz) {
		JSONObject jsonObject = JSONObject.parseObject(json);
		// 取出jsonName对应的值
		String r = jsonObject.getString(jsonName);
		// 转List
		List<T> jsonToList = JsonUtil.jsonToList(r, clazz);
		return jsonToList;

	}

    public static void main(String[] args) {
        String s = "[{\"value\":\"001\",\"baselength\":\"8\",\"title\":\"生产日期\"},{\"value\":\"002\",\"baselength\":\"2\",\"title\":\"生产厂\"},{\"value\":\"003\",\"baselength\":\"1\",\"title\":\"班次\"}]";
		String s2 = "hell0";

		s2=s2.substring(0,s2.length()-1);

	}

}
